package com.xiaochao.bigdata.spark.ad

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.streaming.{Durations, StreamingContext}

object AdClickRealTimeStatSpark {
  /**
    * 广告点击流量实时统计spark作业
    * @author Administrator
    *
    */
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()
      .setMaster("local[2]")
      .setAppName("AdClickRealTimeStatSpark");


    //set new runtime options
//    spark.conf.set("spark.sql.shuffle.partitions", 6)
//    spark.conf.set("spark.executor.memory", "2g")
//    spark.conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
//    spark.conf.set("spark.default.parallelism", "1000");
//    spark.conf.set("spark.streaming.blockInterval", "50");
//    spark.conf.set("spark.streaming.receiver.writeAheadLog.enable", "true");

    // spark streaming的上下文是构建JavaStreamingContext对象
    // 而不是像之前的JavaSparkContext、SQLContext/HiveContext
    // 传入的第一个参数，和之前的spark上下文一样，也是SparkConf对象；第二个参数则不太一样

    // 第二个参数是spark streaming类型作业比较有特色的一个参数
    // 实时处理batch的interval
    // spark streaming，每隔一小段时间，会去收集一次数据源（kafka）中的数据，做成一个batch
    // 每次都是处理一个batch中的数据

    // 通常来说，batch interval，就是指每隔多少时间收集一次数据源中的数据，然后进行处理
    // 一遍spark streaming的应用，都是设置数秒到数十秒（很少会超过1分钟）

    // 咱们这里项目中，就设置5秒钟的batch interval
    // 每隔5秒钟，咱们的spark streaming作业就会收集最近5秒内的数据源接收过来的数据


    val streamingContext:StreamingContext = new StreamingContext(conf,Durations.seconds(5))








  }


}
